package T01_JDBC的核心API;

/**
 *1.核心API
 *   ①DriverManager类(驱动管理对象)
 *          1.)管理和注册数据库驱动:告诉java程序该使用那个数据库驱动jar
 *             static void registerDriver(Driver driver, DriverAction da) 使用DriverManager注册给定的驱动程序。
 *             写代码的时候:Class.forName(“com.mysql.jdbc.Driver”);
 *             通过查看Driver源码发现:在com.mysql.jdbc.Driver类中存在静态代码块
 *                 static {
 *                       try {
 *                          DriverManager.registerDriver(new Driver());
 *                       } catch (SQLException var1) {
 *                         throw new RuntimeException("Can't register driver!");
 *                       }
 *                 }
 *             注意:mysql5 jdbc4.0之后驱动jar包可以省略注册驱动的步骤
 *          2.)得到数据库连接对象
 *             1.类中的方法:
 *               ①Connection getConnection (String url, String user, String password)
 *                 通过连接字符串，用户名，密码来得到数据库的连接对象
 *               ②Connection getConnection (String url, Properties info)
 *                 通过连接字符串，属性对象来得到连接对象
 *             2.参数:
 *                ①url:指定连接的路径
 *                     *语法:jdbc:mysql://ip地址(域名):端口/数据库名称
 *                     *例子:jdbc:mysql://localhost:3306/db3
 *                     *细节:
 *                          1.如果连接是本地一个mysql服务器,并且mysql服务默认端口是3306
 *                            可以简写为 jdbc:mysql:///数据库名
 *                          2.乱码处理
 *                            jdbc:mysql://localhost:3306/数据库?characterEncoding=utf8&useSSL=false
 *                ②user:用户名
 *                ③password:密码
 *   ②Connection接口(数据库连接对象)
 *          一个连接对象,可用于创建Statement和PreparedStatement对象
 *          >功能
 *            1.获取执行sql的对象
 *                *Statement             createStateStatement()
 *                *PreparedStatement     prepareStatement(String sql)
 *            2.管理事务:
 *                *开启事务:setAutoCommit (boolean autoCommit) 调用该方法设置参数为false,即开启事务(false关闭自动提交)
 *                *提交事务:commit()
 *                *回滚事务:rollback()
 *   ③Statement接口(执行sql的对象)
 *           1.描述
 *               ①用于执行静态SQL语句并返回其生成的结果的对象
 *               ②代表一条语句对象，用于发送 SQL 语句给服务器，用于执行静态 SQL 语句并返回它所生成结果的对象。
 *           2.执行SQL
 *               ①.boolean execute(String sql):可执行任意的sql了解
 *               ②.int executeUpdate(String sql):执行的是DML(insert update delete)语句,DDL(create,alter,drop)语句
 *                 *返回值:影响的行数:可以通过这个受影响的行数判断DML语句是否执行成功 返回值>0的则执行成功 反之则执行失败
 *               ③.ResultSet executeQuery(String sql) :执行DQL(Select)语句
 *           3.练习:
 *               ①.account 添加一条记录
 *               ②.account 修改记录
 *               ③.account 删除一条记录
 *   ④PreparedStatement接口
 *          一个 SQL 语句对象，是 Statement 的子接口
 *          1.SQL注意问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全性问题
 *            如:在 JDBCUtilsPackage 登录练习中
 *               用户名瞎书写:faksadjf
 *               密码瞎书写:a'or'a'='a
 *               结果:登录成功
 *          2.解决sql注入问题:使用PreparedStatement解决sql语句的注入
 *               Statement接口
 *                  PreparedStatement
 *          3.什么是预编译
 *               预编译的SQL使用占位符替代,
 *          4.步骤:
 *               1.导入驱动jar包 mysql-connection-java-5.1.37-bin.jar
 *               2.注册驱动
 *               3.获取数据库连接对象Connection
 *               4.定义SQL: sql的参数使用?作为占位符。如:select * from  user where name=? and password=?
 *               5.获取执行SQL语句的对象PreparedStatement  Connection  prepareStatement (String sql)
 *               6.给?进行赋值
 *                    方法: setXxx(参数1,参数2)
 *                    参数1:?的位置编号从1开始
 *                    参数2:?的值
 *               7.执行sql,接收返回结果 执行SQL的时候就不需要传递sql语句了
 *               8.处理结果
 *               9.释放资源
 *   ⑤ResultSet 接口(结果集对象)
 *        1.简述
 *          用于封装数据库查询的结果集，返回给客户端 Java 程序
 *        2.方法
 *            * boolean next():
 *                    游标向下移动  判断当前行是不是最后一行末尾  是否有下一行
 *                    如果是 则返回false,如果不是则返回true
 *            * getxxx(参数):获取数据
 *                >Xxx:代表数据类型 如:int getInt() String  getString()
 *                >参数
 *                    1.int 代表列的编号,从1开始 如:getString(1);
 *                    2.String: 代表列的名称  如:getDouble("balance");
 *            *注意:
 *              使用步骤:
 *                1.游标向下移动一行
 *                2.判断是否有数据
 *                3.获取数据
 *2.
 */
public class T01_Core_API {
    public static void main(String[] args) {

    }
}
